#ifndef HSERIALPORT_H
#define HSERIALPORT_H

#include <QThread>
#include <QTimer>

#include "qextserialport.h"
#include "qextserialenumerator.h"

class HSerialPort : public QThread
{
    Q_OBJECT
public:
    HSerialPort();

    virtual void setup(PortSettings serial_config);     // 配置串口参数
    bool open(QString port);
    void close();
    virtual int  write(QByteArray &ucDataArray);        // 写数据

    // 是否使用外部时钟
    void useExternalClock(bool bUseXCLK = false){ m_bUseXCLK = bUseXCLK;}
    quint64 getTimeStamp();//获取时间戳

public slots:
    // 同步时间，仅在使用外部时钟时有效
    void on_synchronizeTime(quint64 dt){
        if(m_bUseXCLK){
            XCLK = dt;
        }
    }

signals:
    void availablePortsChanged(QStringList);
    //上行/下行原始数据
    void signal_initialData(bool bDir, QByteArray ucDataArray, quint64 dt);

protected:
    bool m_bStopped;
    PortSettings   m_serialConfig;                      // 串口参数
    QextSerialPort *m_pPort;                           // 串口句柄
    QextSerialEnumerator *m_pEnumerator;               // 探测可用的串口设备

    bool    m_bUseXCLK;//使用外部时钟
    qint64  XCLK;//外部时钟

    virtual void run();

protected slots:
    void onPortAddedOrRemoved();

};

#endif // HSERIALPORT_H
